/***************************************
 * \if English
 * @Date:2016.11.24
 * @Author:steven
 * @brief:
 * @Detail:
 * @Editor:
 * @Brief:
 * \else
 *
 * @创建日期：２０１６年１１月24日
 * ＠作者：华磊
 * ＠大概功能描述：生成ｍｄ５值，以及保存ｍｄ５等
 * ************************************/
#ifndef MD5CHECK_H
#define MD5CHECK_H

//#include "enum.h"

#include "./libmd5/cmd5.h"
//#include "gSoapFoundation/soapStub.h"

#include <iostream>
#include <QStringList>



using namespace std;
/**
 * @brief The MD5Check class md5类
 */
class MD5Check
{
public:
    MD5Check();

public:
//    int readVersion(std::vector <ComponentVersion> &componentVersionList);
    int isMd5CheckOk(QString originalFilePath, QString md5FilePath);

    int createMd5File(QString filePath);
    int createMd5String(QString filePath, string &stringOut);
    QString createMd5String(QString stringIn);
    int readFile2String(QString filePath, string &stringOut);
    int writeString2File(string stringIn,QString filePath);


private:


    /**
     * @brief setMd5Check       添加ｍｄ５值
     * @param fileName          文件名称
     * @return                  是否写入成功
     */
    bool setMd5Check(QString fileName);
    /**
     * @brief deleteMd5         删除ｍｄ５值
     * @param fileName          文件名称
     * @return                  是否删除成功
     */
    bool deleteMd5(QString fileName,int robotId);
    /**
     * @brief compareMd5        比较ｍｄ５的值
     * @param fileName          文件名称
     * @return
     */
    bool compareMd5(QString fileName,int robotId);
    /**
     * @brief compareMd5      比较ｍｄ５的值
     * @param md5String       md5字符串
     * @param fileName        文件名称
     * @return
     */
    bool compareMd5(QString md5String,QString fileName);
    /**
     * @brief produceFileMd5    生成ｍｄ５
     * @param file              文件名称
     * @return
     */
    QString produceFileMd5(QString file);
    /**
     * @brief FileDigest        从文件生成ｍｄ５
     * @param file              文件名称
     * @return
     */
    string FileDigest(const string &file);
    /**
     * @brief initMd5           初始化ｍｄ５
     */
    void initMd5();
    /**
     * @brief setMd5            设置ｍｄ５对象
     * @param pCMd5
     */
    void setMd5(void *pCMd5);
    /**
     * @brief getMd5FileList    获取所有文件的ｍｄ５
     * @param md5File           文件名称
     */
    void getMd5FileList(QString md5File);
    /**
     * @brief getFileName       获取文件名称
     * @param filePath          文件所在的绝对路径
     * @return
     */
    QString getFileName(const QString filePath);

    /******************************************************
     * 日期：2017－3－10
     * 修改人：ｓｔｅｖｅｎ
     * 修改内容:将原有的保存ｍｄ５值的接口改为增加机器人ｉｄ，
     * 以避免有重复的文件名
     * ******************************************************/
    /**
     * @brief saveFile          保存文件
     * @param fileName          文件名称
     */
    void saveFile(QString fileName,int robotId);

private:
//      ComponentVersion versionInfo;

};

#endif // MD5CHECK_H
